package kotan;

import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * An environment of AppEngine.
 * @author shuji.w6e
 * @since 1.0
 */
public class AppEngineEnv {

    /** path of dev_appserver command   */
    volatile String sdkHome = "";
    /** server port */
    volatile int port = 8887;
    /** path to datastore */
    volatile String datastorePath = "datastore" + File.separator + "sample.bin";
    /** application id */
    volatile String applicationId = "kotan-server";
    /** application version no */
    volatile String applicationVersion = "test";
    volatile String nameSpace;
    volatile String host = "localhost";

    /**
     * This is a constructor.
     */
    public AppEngineEnv() {
    }

    public URI getAdminUrl() {
        try {
            StringBuilder uri = new StringBuilder();
            uri.append("http://").append(host).append(":").append(port);
            uri.append("/_ah/admin/datastore");
            return new URI(uri.toString());
        } catch (URISyntaxException e) {
            throw new IllegalStateException(e);
        }
    }

    /**
     * nameSpaceを取得する.
     * @return nameSpace
     */
    public String getNameSpace() {
        return nameSpace;
    }

    /**
     * nameSpaceを指定して設定する.
     * @param nameSpace 設定するnameSpace
     */
    public void setNameSpace(String nameSpace) {
        this.nameSpace = nameSpace;
    }

    /**
     * hostを取得する.
     * @return host
     */
    public String getHost() {
        return host;
    }

    /**
     * hostを指定して設定する.
     * @param host 設定するhost
     */
    public void setHost(String host) {
        this.host = host;
    }

    /**
     * portを取得する.
     * @return port
     */
    public int getPort() {
        return port;
    }

    /**
     * portを指定して設定する.
     * @param port 設定するport
     */
    public void setPort(int port) {
        this.port = port;
    }

    /**
     * datastorePathを取得する.
     * @return datastorePath
     */
    public String getDatastorePath() {
        return datastorePath;
    }

    /**
     * datastorePathを指定して設定する.
     * @param datastorePath 設定するdatastorePath
     */
    public void setDatastorePath(String datastorePath) {
        this.datastorePath = datastorePath;
    }

    /**
     * applicationIdを取得する.
     * @return applicationId
     */
    public String getApplicationId() {
        return applicationId;
    }

    /**
     * applicationIdを指定して設定する.
     * @param applicationId 設定するapplicationId
     */
    public void setApplicationId(String applicationId) {
        this.applicationId = applicationId;
    }

    /**
     * applicationVersionを取得する.
     * @return applicationVersion
     */
    public String getApplicationVersion() {
        return applicationVersion;
    }

    /**
     * applicationVersionを指定して設定する.
     * @param applicationVersion 設定するapplicationVersion
     */
    public void setApplicationVersion(String applicationVersion) {
        this.applicationVersion = applicationVersion;
    }

    /**
     * sdkHomeを指定して設定する.
     * @param sdkHome 設定するsdkHome
     */
    public void setSdkHome(String sdkHome) {
        this.sdkHome = sdkHome;
    }

    /**
     * sdkHomeを取得する.
     * @return sdkHome
     */
    public String getSdkHome() {
        return sdkHome;
    }
}
